/*
*  Copyright (c) 2001 Sun Microsystems, Inc.  All rights
*  reserved.
*
*  Redistribution and use in source and binary forms, with or without
*  modification, are permitted provided that the following conditions
*  are met:
*
*  1. Redistributions of source code must retain the above copyright
*  notice, this list of conditions and the following disclaimer.
*
*  2. Redistributions in binary form must reproduce the above copyright
*  notice, this list of conditions and the following disclaimer in
*  the documentation and/or other materials provided with the
*  distribution.
*
*  3. The end-user documentation included with the redistribution,
*  if any, must include the following acknowledgment:
*  "This product includes software developed by the
*  Sun Microsystems, Inc. for Project JXTA."
*  Alternately, this acknowledgment may appear in the software itself,
*  if and wherever such third-party acknowledgments normally appear.
*
*  4. The names "Sun", "Sun Microsystems, Inc.", "JXTA" and "Project JXTA"
*  must not be used to endorse or promote products derived from this
*  software without prior written permission. For written
*  permission, please contact Project JXTA at http://www.jxta.org.
*
*  5. Products derived from this software may not be called "JXTA",
*  nor may "JXTA" appear in their name, without prior written
*  permission of Sun.
*
*  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
*  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
*  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
*  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
*  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
*  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
*  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
*  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
*  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
*  SUCH DAMAGE.
*  ====================================================================
*
*  This software consists of voluntary contributions made by many
*  individuals on behalf of Project JXTA.  For more
*  information on Project JXTA, please see
*  <http://www.jxta.org/>.
*
*  This license is based on the BSD license adopted by the Apache Foundation.
*
*  $Id: AbstractInviteAction.java,v 1.2 2005/03/23 12:53:46 gonzo Exp $
*/

package net.jxta.myjxta.misc.unused;

import net.jxta.discovery.DiscoveryService;
import net.jxta.document.MimeMediaType;
import net.jxta.myjxta.View;
import net.jxta.myjxta.util.Group;
import net.jxta.peergroup.PeerGroup;

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.io.File;
import java.util.zip.ZipEntry;


/**
 *
 * @version $Id: AbstractInviteAction.java,v 1.2 2005/03/23 12:53:46 gonzo Exp $
 *
 * @author james todd [gonzo at jxta dot org]
 */

public abstract class AbstractInviteAction
    extends AbstractAction {

    /** The prefix  for the pipe that allows chat  */
    protected static final String TALK_PREFIX = "JxtaTalkUser.";

    /** The name of the zip entry for a group entry */
    private static final String GROUP = "Group";
 
    /** The name of the zip entry for a peer entry */
    private static final String PEER = "Peer";

    /** The name of the zip entry for a pipe entry */
    private static final String PIPE = "Talk";

    /** The parent JFrame, which is needed if we desire to show dialogs */
    private JFrame frame = null;

    /** The root file directory in which to save files */
    private File rootDir = null;

    /** The MimeMediaType for zip entries */
    private MimeMediaType mime = null;

    /** The View from which the currently selected peer group can be extracted */
    private View view = null;

    /**
    *  The method called if an action is performed. Needs to be implemented by
    *  child classes
    * 
    * @param ae the triggering ActionEvent object
    */
    public abstract void actionPerformed(ActionEvent ae);

    /**
     * Create a new AbstractInviteAction
     * 
     * @param name a descriptive name of the action to be performed
     * @param frame the  JFrame that originated the event
     * @param view the MyJXTAView that allows to determine the selected 
     *             peer group or peer
     */
    public AbstractInviteAction(String name, 
				JFrame frame,
				View view){
        super(name);

	this.view = view;
        this.frame = frame;
        this.rootDir = new File(System.getProperty("user.dir"));

        this.mime = MimeMediaType.XMLUTF8;
    }

    /**
     * Return the mime type of the zip entries
     *
     * @return the mime type
     */
    public MimeMediaType getMIME() {
        return this.mime;
    }

    /**
     * Return the currently selected peer group or null if no peer group is
     * selected 
     * 
     * @return the currently selected peer group
     */
    public PeerGroup getPeerGroup() {
	Group parent = this.view.getGroup();
	PeerGroup pg = parent.getPeerGroup();

	return pg;
    }

    /** 
     * Get the JFrame parent object
     * 
     * @return the JFrame parent 
     */
    public JFrame getFrame() {
        return this.frame;
    }

    /**
     * Get the directory in which files should be saved or retrieved from
     *
     * @return the parent directory 
     */
    public File getRootDir() {
        return this.rootDir;
    }

    /**
     * Return ZipEntry with a suitable name for the type given
     * 
     * @param type for the ZipEntry
     * @return a ZipEntry with the correct name
     */
    protected static ZipEntry getZipEntry(int type) {
        ZipEntry ze = null;

        switch (type) {
        case DiscoveryService.GROUP:
            ze = new ZipEntry(GROUP);

            break;

        case DiscoveryService.PEER:
            ze = new ZipEntry(PEER);

            break;

        case DiscoveryService.ADV:
            ze = new ZipEntry(PIPE);

            break;
        }

        return ze;
    }
}
